Computer and communication technologies continue to advance at a rapid pace. Indeed, computer and communication technologies are involved in many aspects of a person's day. For example, many devices being used today by consumers have a small computer inside of the device. These small computers come in varying sizes and degrees of sophistication. These small computers include everything from one microcontroller to a fully functional complete computer system. For example, these small computers may be a one-chip computer, such as a microcontroller, a one-board type of computer, such as a controller, a typical desktop computer, such as an IBM-PC compatible, etc.
Computers typically have one or more processors at the heart of the computer. The processor(s) usually are interconnected to different external inputs and outputs and function to manage the particular computer or device. For example, a processor in a thermostat may be connected to buttons used to select the temperature setting, to the furnace or air conditioner to change the temperature, and to temperature sensors to read and display the current temperature on a display.
Many appliances, devices, etc., include one or more small computers. For example, thermostats, furnaces, air conditioning systems, refrigerators, telephones, typewriters, automobiles, vending machines, and many different types of industrial equipment now typically have small computers, or processors, inside of them. Computer software runs the processors of these computers and instructs the processors how to carry out certain tasks. For example, the computer software running on a thermostat may cause an air conditioner to stop running when a particular temperature is reached or may cause a heater to turn on when needed.
One aspect of computer technology that is of great importance is software libraries. Software libraries are essentially pre-packaged programming code that a programmer can incorporate into a computer program at run time (dynamically linking a library) or when the program is compiled into machine-readable code (statically linking a library). Software libraries are valuable because they enable a user to create a software program in a rapid fashion. The programmer does not have to create every single algorithm used in a particular program.
Unfortunately, there are many problems with current software libraries. For example, software libraries are frequently distributed in a “black box” format such that the programmer does not understand how the algorithm in the library is performing the task at hand. As a result, the programmer may not fully understand the limitations or the capabilities of the algorithm in the library.
Furthermore, libraries typically cannot be modified. As a result, the programmer is forced to utilize the functions as they are in the library. The programmer cannot customize the library to suit a particular situation. This can create significant problems and limitations in certain circumstances. For example, when programming for embedded devices, which often have significant memory and processing limitations, programmers are properly concerned about the size of a particular function utilized by a program. Functions from libraries that are significant in size simply cannot be utilized with embedded devices, although these functions may contain many code segments that are simply unnecessary for the programming task at hand. However, because the programmer cannot alter, adopt, or even view the programming code in the library, the algorithms cannot be used for many programming tasks.
In addition, when software libraries are distributed and are editable, significant problems can be created when newer versions of libraries are distributed. For example, when version 1 of a software library has been edited by a user, it can be almost impossible, or at least very time-consuming, to incorporate the changes or adaptations made to version 1 into version 2 of the software library.
Accordingly, benefits may be realized by improved systems and methods for user configuration of software libraries. Some exemplary systems and methods for configurable software libraries are described herein.